#ifndef CONSOLEAPPENDER_H
#define CONSOLEAPPENDER_H

#include <QMutex>  // 引入线程安全锁
#include <QMap>
#include <QMutexLocker>  // 自动释放锁，避免遗漏解锁
#include "baseappender.h"

// 输出内容到控制台（线程安全版，兼容所有 Qt 5.x 版本）
class ConsoleAppender : public BaseAppender
{
    Q_OBJECT
public:
    ConsoleAppender();
    ConsoleAppender(LogLevel level);


    void setLevelColor(LogLevel level, const QColor& color);// 自定义日志级别的颜色（接收QColor，自动转换为ANSI代码）
    void append(LogLevel level, const QString &msg) override;
    void setLevel(LogLevel level) override;// 重写 setLevel 并加锁，确保动态修改级别时的线程安全

private:
    void initDefaultColors();// 初始化默认颜色（与QTextEditAppender保持一致）
    QString colorToAnsiCode(const QColor& color) const;// 将QColor转换为ANSI前景色代码（如\033[32m）


private:
    QMutex m_mutex;  // 线程安全锁
    QMap<LogLevel, QString> m_levelAnsiCodes;  // 日志级别→ANSI颜色代码映射
    const QString ANSI_RESET = "\033[0m";  // 重置颜色代码
};

#endif // CONSOLEAPPENDER_H
